package java8.lambda;

/**
 * @ClassName Test
 * @Description TODO lambda表达式测试类
 * @Author WLJ
 * @Date 2024/6/3 20:25
 * @Version 1.0
 */
public class Test {
    /*
     * @Author WLJ
     * @Description //TODO 无参无返回值
     * @Date 20:27 2024/6/3
     * @Params
     * @return
     * @version 1.0
     **/
    @FunctionalInterface
    interface InterTest1 {
        void test();
    }

    /*
     * @Author WLJ
     * @Description //TODO 有参无返回值
     * @Date 20:40 2024/6/3
     * @Params
     * @return
     * @version 1.0
     **/
    @FunctionalInterface
    interface InterTest2 {
        void test(String s);
    }
    /*
     * @Author WLJ
     * @Description //TODO 有参有返回值
     * @Date 20:48 2024/6/3
     * @Params
     * @return
     * @version 1.0
     **/
    @FunctionalInterface
    interface InterTest3 {
        String test(String name, int age);
    }
    public static void main(String[] args) {
        int i = 1;
        // 无参无返回值
        InterTest1 interTest1 = () -> {
            // 多行代码需要大括号
            // 可以使用局部变量但不能修改其值
//            i++;
            System.out.println(i);
            System.out.println("无参无返回值");
        };
        interTest1.test();
        System.out.println();
        InterTest1 interTest11 = () -> System.out.println("无参无返回值，只有一行代码，可以省略大括号，其他情形也类似");
        interTest11.test();
        System.out.println();

        // 仅有一个参数参无返回值
        InterTest2 interTest2 = (s) -> System.out.println("只有一个参数时：" + s);
        interTest2.test("哈哈");
        // 有且仅有一个参数时,参数的括号可以省略
        InterTest2 interTest21 = s -> System.out.println("只有一个参数时参数的括号可省略：" + s);
        interTest21.test("嘿嘿");
        System.out.println();

        // 有参有返回值
        InterTest3 interTest3 = (n, a) -> {
            String s = "【" + n + "】今年【" + a + "】岁";
            return s;
        };
        // 仅有一句代码时return也可以省略
        InterTest3 interTest4 = (n, a) -> "【" + n + "】今年【" + a + "】岁";
        String name = "小米";
        Integer age = 18;
        System.out.println(interTest3.test(name, age));
        System.out.println(interTest4.test(name, age));

    }
}
